package case24

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"regexp"
)

func Test() {
	fmt.Println("🎯示例二十四：自定义验证器-使用单个字段校验")

	r := gin.Default()

	// Login
	r.GET("/login", func(c *gin.Context) {
		var username string = c.Query("username")
		var password string = c.Query("password")

		// 使用验证函数
		if err := validUsername(username); err != nil {
			c.JSON(500, gin.H{"message": err.Error()})
			c.Abort()
			return
		}
		if err := validPassword(password); err != nil {
			c.JSON(500, gin.H{"message": err.Error()})
			c.Abort()
			return
		}

		c.JSON(200, gin.H{
			"username": username,
			"password": password,
		})
	})

	r.Run(":60000")

}

// username 验证器
func validUsername(username string) error {
	if username == "" || len(username) == 0 {
		return fmt.Errorf("username is not null.")
	}

	return nil
}

// password 验证器
func validPassword(password string) error {
	if len(password) < 6 {
		return fmt.Errorf("password 不能小于6位.")
	}

	// 修复后的正则：必须同时包含数字和字母，并且匹配整个字符串
	hasDigit := regexp.MustCompile(`[0-9]`).MatchString(password)
	hasLetter := regexp.MustCompile(`[a-zA-Z]`).MatchString(password)

	if !hasDigit || !hasLetter {
		return fmt.Errorf("password 必须包含字母和数字")
	}
	return nil
}
